////////////////////////////////////////////////////////////////////////////////////
//Прототип функции:  void writeTo(uint8 DEVICE, uint8 address, uint8 val)             	     
//Описание параметров:  DEVICE: I2C адрес устройства
//           address:Операционная адрес регистра
//           val:Письменные к значению регистра
// Возвращаемое значение: Нет
// Описание: Вал записываются в соответствующий регистр адреса по шине I2C
///////////////////////////////////////////////////////////////////////////////////
void writeTo(uint8 DEVICE, uint8 address, uint8 val) 
{
  // all i2c transactions send and receive arrays of i2c_msg objects 
  i2c_msg msgs[1]; // we dont do any bursting here, so we only need one i2c_msg object
 uint8 msg_data[2];
  
  msg_data = {address,val};  // адреса, значение
  msgs[0].addr = DEVICE;
  msgs[0].flags = 0; // запись
  msgs[0].length = 2; //длинна 2
  msgs[0].data = msg_data;
  i2c_master_xfer(I2C1, msgs, 1,0);  //
}

////////////////////////////////////////////////////////////////////////////////////
//Прототип функции:  void readFrom(uint8 DEVICE, uint8 address, uint8 num, uint8 *msg_data)              	     
//Описание параметров:  DEVICE: I2C адрес устройства
//           address:Операционная адрес регистра 
//           num:считываемое число
//           *msg_data:указатель на данные
// Возвращаемое значение: Нет
// Описание: I2C шине для чтения данных
///////////////////////////////////////////////////////////////////////////////////
void readFrom(uint8 DEVICE, uint8 address, uint8 num, uint8 *msg_data) 
{
  i2c_msg msgs[1]; 
  msg_data[0] = address;
  
  msgs[0].addr = DEVICE;
  msgs[0].flags = 0; //флаг 0, запись
  msgs[0].length = 1; // just one byte for the address to read, 0x00
  msgs[0].data = msg_data;
  i2c_master_xfer(I2C1, msgs, 1,0);
  
  msgs[0].addr = DEVICE;
  msgs[0].flags = I2C_MSG_READ; //читать
  msgs[0].length = num; // Читайте количество байт
  msgs[0].data = msg_data;
  i2c_master_xfer(I2C1, msgs, 1,0);
}
